package com.hsj.controller;

import cn.hsj.service.IpCountService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hsj.controller.utils.R;
import com.hsj.domain.Book;
import com.hsj.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 如果 controller层 返回的结果 虽然都是json 但是没有统一格式， 前端无法判断 数据是因为没有查到而失败，还是因为查询异常而失败
 * 可以定义一个 类，让所有给前端返回的数据都用这个R，达到统一。 前后端数据协议
 */

@RestController
@RequestMapping("/booksR")
public class BookControllerUseR {
    @Autowired
    private IpCountService ipCountService;
    @Autowired
    private IBookService ibookService;

    @GetMapping
    public R getAll() {
        return new R(true,ibookService.list());
    }

    @PostMapping
    public R save(@RequestBody Book book) {   //如果提交的是 一个json串， 用@RequestBody 做映射
//        return new R(ibookService.save(book));
        //也可以 通过后段给前端一些数据的反馈
//        int b = 10/0;   模拟异常
        boolean flag = ibookService.save(book);
        return  new R(flag, flag ? "添加成功" : "添加失败");
    }

    @PostMapping("/form")
    public R save1(@ModelAttribute Book book) {  //如果提交的是一个表单 用@ModelAttribute 做映射
        return new R(ibookService.save(book));
    }

    @PutMapping
    public R update(@RequestBody Book book) {
        return new R(ibookService.updateById(book));
    }

    @DeleteMapping("{id}")
    public R delete(@PathVariable Integer id) {
        return new R(ibookService.removeById(id));
    }

    @GetMapping("{id}")
    public R getById(@PathVariable Integer id) {
        return new R(true,ibookService.getById(id));
    }

    @GetMapping("{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage, @PathVariable int pageSize,Book book) { //book是请求路径后面 ? k=v & k=v 传入进来的
         ipCountService.count();
        IPage<Book> page = ibookService.getPage(currentPage, pageSize,book);
        //如果当前页码值 大于了总页码值， 那么就重新执行查询操作，使用最大页码值作为当前页码值
        //主要解决的问题 是 如果最后一页只有一条数据，删除后无法回到最初页
        if(currentPage > page.getPages()){
            page =ibookService.getPage((int)page.getPages(),pageSize,book);
        }
        return new R(true,page);
    }
}
